package com.yh.csx.event.domain.event;

import com.yh.csx.event.common.exception.EventException;
import com.yh.csx.event.common.exception.ExceptionEnum;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;

/**
 * @author zhangsheng
 * @date 2021/8/20 17:21
 * 事件生命周期：
 * 1. 创建、发送失败、redo日志、已发送【100、101、102、103】；
 * 2. 存储失败、存储文件、已存储【200、201、202】；
 * 3. 转发中、转发失败、转发成功【300、301、303】；
 * 4. 消费中、消费失败、消费成功【400、401、402】；
 */
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum EventStatusEnum {
    CONSUME_ING(400, "消费中"),
    CONSUME_FAIL(401, "消费失败"),
    CONSUME_OK(402, "消费成功"),
    UNKNOWN(0, "初始化"),
    ;
    private Integer code;
    private String name;

    public static EventStatusEnum getEventStatusEnum(Integer code) {
        return Arrays.stream(values()).filter(event -> event.getCode().equals(code))
                .findFirst().orElseThrow(() -> new EventException(ExceptionEnum.NO_STATUS_TYPE, null == code ? "null" : code.toString()));
    }
}
